/**
* Colloid project
*
* Combat log analyzer.
*
* copyright: (c) 2013 by Darek <netmik12 [AT] gmail [DOT] com>
* license: BSD, see LICENSE for more details
*/
package colloid;
import java.io.File;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.MenuItem;
import javafx.scene.control.RadioButton;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.control.TreeView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.stage.DirectoryChooser;
import colloid.http.Peer;
import colloid.http.User;
import colloid.model.event.Actor;
import colloid.model.event.Combat;
import colloid.model.event.CombatEvent;
import colloid.model.event.Util;
public class MainController extends AnchorPane implements Initializable {
@FXML
TextField combatLogPath;
@FXML
TextField logPathField;
@FXML
Button logPathButton;
@FXML
Button parseActButton;
@FXML
ListView<String> textLog;
@FXML
TextArea recountLog;
@FXML
Button resetCombatButton;
protected RecountApp recountApp = RecountApp.getInstance();
@FXML
TitledPane logPath;
@FXML
TitledPane recountLogPane;
@FXML
MenuItem menuItemClose;
@FXML
MenuItem menuHelpHowto;
@FXML
ListView<Actor> combatListView;
@FXML
TreeView<String> treeView;
@FXML
TextArea helptext;
@FXML
Tab howToUse;
@FXML
TabPane combatTabPane;
@FXML
RadioButton isPeer;
private App application;
public void init(App application) {
setApplication(application);
logPathField.setText(application.props.getProperty("combatLogPath", ""));
if (!logPathField.getText().isEmpty()) {
parseActButton.setDisable(false);
}
}
@Override
public void initialize(URL location, ResourceBundle resources) {
//disable peer radio - p2p
isPeer.setDisable(true);
if (recountApp.isRunning()) {
parseActButton.setText("Stop");
}
textLog.setEditable(false);
recountLog.setEditable(false);
ObservableList<Actor> items = FXCollections.observableArrayList();
combatListView.setItems(items);
ObservableList<String> logItems = FXCollections.observableArrayList();
textLog.setItems(logItems);
recountApp.onUpdate(new Combat.EventHandler<CombatEvent>() {
@Override
public void handle(CombatEvent event) {
treeView.setRoot(Util.rootTreeView(recountApp.getFightList()));
}
});
}
public App getApplication() {
return application;
}
public void setApplication(App application) {
this.application = application;
}
public void resetCombat(ActionEvent event) {
}
public void closeAction(ActionEvent event) {
try {
application.stop();
Peer.getInstance().stop();
} catch (Exception e) {
e.printStackTrace();
}
}
public void howTouseAction(ActionEvent event) {
recountLogPane.setExpanded(true);
combatTabPane.getSelectionModel().clearAndSelect(3);
}
public void chooseCombatDirPathAction(ActionEvent event) {
if (!recountApp.isRunning()) {
DirectoryChooser directoryChooser = new DirectoryChooser();
directoryChooser.setTitle("Choose combat log file path ...");
File file = directoryChooser.showDialog(null);
if (file != null) {
logPathField.setText(file.getPath());
recountApp.setCombatDirPath(file.getPath());
application.props.setProperty("combatLogPath", logPathField.getText());
application.saveParams();
parseActButton.setDisable(false);
}
} else {
recountApp.stop();
}
}
public void toggleRecountAction(ActionEvent event) {
if (!recountApp.isRunning()) {
recountApp.setCombatDirPath(logPathField.getText()).run();
recountApp.onUpdate(new Combat.EventHandler<CombatEvent>() {
@Override
public void handle(CombatEvent event) {
if (event.getLogdata().contains("Safe Login")) {
User.getInstance().login(event.getLogdata());
}
textLog.getItems().add(0, event.getLogdata());
combatListView.getItems().clear();
combatListView.getItems().addAll(recountApp.getActorList());
if (Peer.getInstance().isRunning()) {
Peer.getInstance().send(event.getLogdata());
}
}
});
if (isPeer.isSelected() && !Peer.getInstance().isRunning()) {
Peer.getInstance().run();
}
parseActButton.setText("Stop");
} else {
recountApp.stop();
if (Peer.getInstance().isRunning()) {
Peer.getInstance().stop();
}
parseActButton.setText("Start");
}
}
public void switchPaneAction(MouseEvent event) {
}
public void openTextLogPopupAction(ActionEvent event) {
application.showPopupTextLog();
}
public void openDotTimer(ActionEvent event) {
application.showDotTimer();
}
}